#ifndef AUDIOCAPTURE_H
#define AUDIOCAPTURE_H

#include <QObject>
#include <QAudioInput>
#include <QAudioFormat>
#include <QAudioDeviceInfo>
#include <QByteArray>
#include <QBuffer>
#include <QTimer>
#include "../logging/logger.h"

class AudioCapture : public QObject
{
    Q_OBJECT

public:
    explicit AudioCapture(QObject *parent = nullptr);
    ~AudioCapture();

    // 开始捕获音频
    bool start();
    
    // 停止捕获音频
    void stop();
    
    // 是否正在捕获
    bool isCapturing() const;
    
    // 设置音频质量
    void setQuality(int quality); // 1-低质量, 2-中质量, 3-高质量
    
    // 获取当前音频质量
    int getQuality() const;
    
    // 设置采样率
    void setSampleRate(int sampleRate);
    
    // 获取采样率
    int getSampleRate() const;
    
    // 设置通道数
    void setChannelCount(int channelCount);
    
    // 获取通道数
    int getChannelCount() const;

signals:
    // 音频数据可用信号
    void audioDataAvailable(const QByteArray &data);
    
    // 错误信号
    void errorOccurred(const QString &errorMsg);

private slots:
    // 读取音频数据
    void readAudioData();

private:
    QAudioInput *audioInput;
    QBuffer audioBuffer;
    QAudioFormat audioFormat;
    QAudioDeviceInfo inputDevice;
    QTimer dataTimer;
    
    int quality;
    int sampleRate;
    int channelCount;
    int sampleSize;
    bool capturing;
    
    // 初始化音频格式
    void initAudioFormat();
    
    // 选择音频设备
    bool selectAudioDevice();
};

#endif // AUDIOCAPTURE_H 